package 树;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

public class Demo03 {
    /*
    * 翻转二叉树: 深度优先搜索
    * */
    static class Solution {
        public void invertTree(TreeNode root) {
            if(root == null){
                return;
            }
            TreeNode tmp = root.left;
            root.left = root.right;
            root.right = tmp;
            invertTree(root.left);
            invertTree(root.right);
        }
    }
    /*
    * 可以使用队列进行迭代: 先将根节点入队列 进入循环 出队头元素 翻转
    * 将该节点的左右节点入队列,继续循环,直到队列为空
    * 浅浅写一下吧!
    * */

    static class Solution2 {
        public TreeNode invertTree(TreeNode root) {
            if(root == null){
                return null;
            }
            Queue<TreeNode> queue = new LinkedList<>();
            queue.add(root);
            while(!queue.isEmpty()){
                TreeNode node = queue.poll();
                TreeNode tmp = node.right;
                node.right = node.left;
                node.left = tmp;
                if(node.left != null) queue.add(node.left);
                if(node.right != null) queue.add(node.right);
            }
            return root;
        }
    }
}
